# encoding: utf-8
# 项目名称： 常用设计模式
# @File  : 003-简单工厂模式.py
# @Author: sun hao
# @Desc : 
# @Date  :   13:56 2024/10/29

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):
    """
    抽象支付类，定义了支付接口。
    """
    @abstractmethod
    def pay(self, money):
        pass


class Alipay(Payment):
    """
    支付宝支付类。
    """
    def __init__(self, use_huabei=False):
        self.use_huabei = use_huabei

    def pay(self, money):
        print("支付宝")
        if self.use_huabei:
            print(f"花呗支付{money}元")
        else:
            print(f"余额支付{money}元")


class WeChatPay(Payment):
    """
    微信支付类。
    """
    def pay(self, money):
        print("微信")
        print(f"支付{money}元")


class PaymentFactory:
    """
    支付工厂类，用于创建不同类型的支付对象。
    """
    def create_payment(self, payment_type):
        if payment_type == "alipay":
            return Alipay()
        elif payment_type == "alipay-huabei":
            return Alipay(use_huabei=True)
        elif payment_type == "wechatpay":
            return WeChatPay()
        else:
            raise ValueError(f'No such payment named: {payment_type}')


# 客户端使用
pf = PaymentFactory()
p = pf.create_payment("wechatpay")
p.pay(1024)
